package test1;

import service.Service;
import extthread.ThreadA;
import extthread.ThreadB;

/**
　* @Description: TODO
　* @param ${tags}
　* @return ${return_type}
　* @throws
　* @author Merlin
　* @date 2018/6/22 13:43
　*/

/**
 * 验证synchronized(非this对象)与同步synchronized方法是异步调用的效果。
 */
public class Run {

	public static void main(String[] args) {
		Service service = new Service();

		ThreadA a = new ThreadA(service);
		a.setName("A");
		a.start();

		ThreadB b = new ThreadB(service);
		b.setName("B");
		b.start();

	}


	/**
	 * 运行结果：
	 * a begin
	   b begin
	   b   end
	   a   end
	 * 由于对象监视器不同，所以运行结果就是异步的。
	 * 同步代码块放在非同步synchronized方法中进行什么，并不能保证调用方法的线程
	 * 的执行同步/顺序性，也就是线程调用方法的顺序是无序的，虽然在同步块中执行的顺序是同步的，
	 * 这样极易出现“脏读”问题。
	 * 使用“synchronized(非this对象x)同步代码块”格式也可以解决“脏读”问题。
	 * 实验：syn_Out_asyn
	 */
}
